Introduction

This analysis explores whether the clusters identified in our previous PCA and clustering analysis provide a meaningful way to categorize countries into traditional international relations categories such as “great powers,” “middle powers,” and so on. We’ll examine the composition of each cluster, the stability of cluster membership over time, and evaluate the face validity of using these clusters as a basis for status categorization.

Data Loading and Preparation

First, we’ll load the integrated status dataset created in the previous analysis:

# Load the integrated status dimensions data
integrated_status <- read.csv("/Users/yutianyi/Desktop/MA thesis data creation/integrated_status_dimensions.csv", stringsAsFactors = FALSE)

# Preview the data
glimpse(integrated_status)
## Rows: 1,505
## Columns: 29
## $ country                      <chr> "Czechoslovakia", "Egypt", "France", "Ind…
## $ recognition_count            <int> 39, 58, 82, 55, 33, 36, 73, 58, 32, 23, 4…
## $ weighted_recognition         <dbl> 49.625, 60.250, 75.500, 43.750, 31.750, 3…
## $ eigenvector_centrality       <dbl> 0.52822030, 0.71045720, 1.00000000, 0.660…
## $ pagerank                     <dbl> 0.012528771, 0.019578976, 0.037892397, 0.…
## $ authority                    <dbl> 0.54672243, 0.72487574, 1.00000000, 0.665…
## $ betweenness                  <dbl> 0.0244847825, 0.0001410069, 0.0260780360,…
## $ recognition_rate             <dbl> 0.39393939, 0.58585859, 0.82828283, 0.555…
## $ network_inconsistency        <dbl> 0.2902262, 0.8616718, 1.2127113, 0.540182…
## $ outgoing_ties                <int> 59, 61, 83, 44, 34, 32, 78, 60, 44, 25, 5…
## $ recognition_balance          <int> -20, -3, -1, 11, -1, 4, -5, -2, -12, -2, …
## $ recognition_ratio            <dbl> 0.6610169, 0.9508197, 0.9879518, 1.250000…
## $ recognition_status_pca       <dbl> 0.5300235, 0.7343870, 1.0000000, 0.641582…
## $ prestige_status_pca          <dbl> 0.43957121, 0.62576816, 1.00000000, 0.604…
## $ brokerage_status_pca         <dbl> 0.38788572, 0.32058496, 0.63613453, 0.604…
## $ overall_status_network_pca   <dbl> 0.5032924, 0.6427105, 1.0000000, 0.656207…
## $ year                         <int> 1960, 1960, 1960, 1960, 1960, 1960, 1960,…
## $ external_internal_ratio      <dbl> 0.6610169, 0.9508197, 0.9879518, 1.250000…
## $ attribute_status_pca         <dbl> -1.47260670, -1.59817226, 2.71194106, 0.2…
## $ attribute_status_pca_z       <dbl> -0.642036308, -0.696781170, 1.182369075, …
## $ overall_status_network_pca_z <dbl> 0.98399426, 1.66919367, 3.42516686, 1.735…
## $ combined_status_score        <dbl> 0.17097897, 0.48620625, 2.30376797, 0.926…
## $ attribute_status_quartile    <int> 2, 2, 4, 4, 2, 2, 4, 4, 2, 1, 4, 4, 4, 1,…
## $ network_status_quartile      <int> 4, 4, 4, 4, 4, 3, 4, 4, 3, 2, 4, 4, 4, 3,…
## $ combined_status_quartile     <int> 3, 4, 4, 4, 3, 3, 4, 4, 3, 2, 4, 4, 4, 2,…
## $ status_type                  <chr> "Upper-Middle Status", "High Status", "Hi…
## $ status_inconsistency         <dbl> 1.6260306, 2.3659748, 2.2427978, 1.617973…
## $ cluster                      <int> 3, 3, 4, 3, 3, 3, 4, 4, 3, 1, 3, 4, 4, 1,…
## $ hc_cluster                   <int> 1, 2, 3, 2, 1, 1, 2, 2, 1, 4, 1, 3, 3, 4,…

Let’s examine the basic structure of our clusters and status measures:

# Create a summary of cluster sizes
cluster_summary <- integrated_status %>%
  group_by(year, cluster) %>%
  summarise(count = n()) %>%
  ungroup()

# Display summary
ggplot(cluster_summary, aes(x = as.factor(year), y = count, fill = as.factor(cluster))) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(x = "Year", y = "Number of Countries", fill = "Cluster",
       title = "Distribution of Countries Across Clusters by Year") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Cluster Composition Analysis

Let’s examine which countries belong to each cluster and how this varies over time:

# Create a function to identify the top N countries in each cluster by status score
top_countries_by_cluster <- function(data, n = 5) {
  data %>%
    group_by(year, cluster) %>%
    top_n(n, combined_status_score) %>%
    arrange(year, cluster, desc(combined_status_score)) %>%
    select(year, cluster, country, combined_status_score, 
           attribute_status_pca, overall_status_network_pca) %>%
    ungroup()
}

# Get top 5 countries in each cluster by combined status score
top_countries <- top_countries_by_cluster(integrated_status, 5)

# Display the results
top_countries %>%
  kable("html", caption = "Top 5 Countries by Status Score Within Each Cluster") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  collapse_rows(columns = c(1, 2), valign = "top")
Top 5 Countries by Status Score Within Each Cluster
year cluster country combined_status_score attribute_status_pca overall_status_network_pca
1960 1 Nicaragua -0.2843814 -1.1405148 0.2885272
Guatemala -0.2959789 -1.1960687 0.2887359
Luxembourg -0.3073178 0.5174026 0.1321187
China -0.3131318 -1.0356705 0.2675266
Costa Rica -0.3338178 -1.0835529 0.2633563
3 India 0.9265412 0.2696291 0.6562076
Canada 0.8265461 0.6136398 0.5849980
Brazil 0.8009837 -0.0947567 0.6374379
Turkey 0.6546328 0.2334019 0.5487705
Argentina 0.6133013 -0.6390619 0.6093477
4 United States 3.0086128 6.1283449 0.9837599
France 2.3037680 2.7119411 1.0000000
United Kingdom 2.0454482 3.1076800 0.8597727
Italy 1.5800123 1.5191395 0.8112876
Japan 1.1205146 0.0166844 0.7575823
1965 1 Luxembourg -0.2438937 0.9771765 0.1171418
Ecuador -0.3096979 -1.2937576 0.2918191
Tunisia -0.3347619 -1.5704337 0.3061636
New Zealand -0.3563538 -0.0775907 0.1649460
Bolivia -0.3726632 -1.4621200 0.2811314
2 United States 3.4211763 7.8378288 1.0000000
3 Canada 0.7551738 1.0552218 0.5167807
Turkey 0.7269994 1.1883666 0.4935040
Egypt 0.6486021 -1.1041608 0.6649722
Denmark 0.6281872 1.4551966 0.4296226
Sweden 0.5913316 0.4599058 0.5029173
4 United Kingdom 2.2126755 3.4647818 0.8961458
France 2.1987822 3.2014612 0.9138513
Italy 1.6494158 2.2384985 0.7757161
Belgium 1.3147396 1.8547217 0.6735674
India 1.2148042 0.9983097 0.7088722
1970 1 Philippines -0.2200956 -0.5467268 0.2620125
Ecuador -0.2707081 -1.0911051 0.2897082
Luxembourg -0.2714858 0.9846253 0.1052526
New Zealand -0.3274484 -0.1405439 0.1822935
Malaysia -0.3582475 -0.7539790 0.2241782
2 United States 3.6065137 8.6880271 1.0000000
3 Egypt 0.8883168 -0.7166147 0.7281427
Turkey 0.6895189 1.2257475 0.4749356
Brazil 0.6893366 -0.1402031 0.5960356
Denmark 0.6178748 1.5659945 0.4155971
Sweden 0.5772023 0.5673141 0.4876392
4 France 2.1508980 3.3316843 0.8828131
United Kingdom 2.0271376 3.4548239 0.8215260
Italy 1.5210700 2.3186821 0.7163737
Japan 1.3775047 1.9329419 0.6921702
India 1.3293003 1.5117982 0.7099137
1975 1 New Zealand -0.1642187 0.3175007 0.2080851
Luxembourg -0.1793019 1.4253427 0.1036699
Philippines -0.2310188 -0.5402937 0.2569967
Ireland -0.2376090 0.1365024 0.1942759
Costa Rica -0.2382184 -0.6949750 0.2677887
2 United States 3.6548453 8.9097384 1.0000000
3 Brazil 0.7930436 0.6130492 0.5714169
Turkey 0.7531362 1.7482444 0.4544731
Sweden 0.7426823 1.1954735 0.4992556
Austria 0.7280688 0.9128713 0.5183785
Denmark 0.6922060 2.1096009 0.3976220
4 France 2.2124225 3.9669475 0.8514954
United Kingdom 2.0544217 3.9457446 0.7890792
Japan 1.5899470 2.3320775 0.7432143
India 1.5360593 2.2526930 0.7283274
Italy 1.5204139 2.8104917 0.6724780
1980 1 Ireland -0.0975373 0.3426375 0.2329906
Luxembourg -0.1068092 1.5255504 0.1242807
New Zealand -0.2015616 0.0989663 0.2122750
Jamaica -0.2329043 0.0710263 0.2019989
Gabon -0.2641353 -0.6422114 0.2525614
2 United States 3.7345839 9.2755234 1.0000000
3 Austria 0.8616374 1.0510623 0.5604742
Turkey 0.8610542 1.4594796 0.5240059
Denmark 0.8243299 2.3512872 0.4299486
Greece 0.7621914 1.5577218 0.4750594
Egypt 0.7530382 -0.0945834 0.6179115
4 France 2.3027900 3.8097642 0.9022135
United Kingdom 2.1107535 3.6153993 0.8413081
China 1.9536645 4.5920793 0.6907402
Belgium 1.5738503 2.6008124 0.7128242
Japan 1.5694991 2.8473548 0.6891827
1985 1 Luxembourg -0.0239086 1.7179362 0.1409497
Ireland -0.1222942 0.5434181 0.2051047
Nicaragua -0.1826549 -0.2518474 0.2510898
Costa Rica -0.1864010 -0.2223379 0.2469475
Gabon -0.1879268 -0.4415426 0.2657724
2 United States 3.9938613 10.4649067 1.0000000
3 Turkey 0.8546637 2.0374286 0.4701352
Denmark 0.7588002 2.5153633 0.3887265
Egypt 0.7579088 0.1336561 0.5996463
Australia 0.7328941 1.6152845 0.4580307
Portugal 0.7206726 2.0167846 0.4174400
4 France 2.1575102 4.3357761 0.7964303
United Kingdom 2.1513962 3.8691383 0.8353380
China 2.0739836 5.1932826 0.6863700
Belgium 1.7662236 2.8095420 0.7725925
Italy 1.7277926 3.7564760 0.6729503
1990 1 Luxembourg 0.0097770 1.9140187 0.1372633
Ireland -0.0461653 0.7817750 0.2149399
Costa Rica -0.1315831 0.0167640 0.2480444
Bolivia -0.1669810 0.0883618 0.2272880
Jamaica -0.1871924 0.6239628 0.1715497
2 United States 4.2931486 11.8378274 1.0000000
3 Algeria 0.8625321 1.0226548 0.5633583
Nigeria 0.8166040 1.1509300 0.5332889
Greece 0.8120446 2.3020735 0.4293150
Austria 0.7764210 1.3978516 0.4950322
Venezuela 0.7593244 1.4969939 0.4792799
4 France 2.3556482 4.8740521 0.8293102
China 2.2960675 5.9565274 0.7090374
United Kingdom 2.2389526 4.3243279 0.8305882
Germany 1.9980488 3.7127177 0.7868106
Italy 1.8713244 4.2883427 0.6841772
1995 1 Jamaica -0.0331579 1.2481155 0.1788639
Bolivia -0.0447757 0.7841345 0.2152961
Paraguay -0.0573059 1.1147095 0.1808715
Cameroon -0.0791206 0.6129238 0.2165079
Ukraine -0.0981995 0.3705127 0.2302483
2 United States 4.5327478 12.9369410 1.0000000
China 3.0840259 8.8498392 0.7730234
3 Switzerland 0.8599963 1.6795173 0.5040558
Finland 0.7825398 2.9709460 0.3579722
Pakistan 0.7646739 1.5598314 0.4758825
Poland 0.7434127 1.3055188 0.4897906
Romania 0.7071111 1.0588309 0.4969018
4 France 2.7983754 6.2662695 0.8859701
Germany 2.6295904 5.6276299 0.8739385
United Kingdom 2.5409477 5.3205022 0.8651115
Belgium 2.3399085 4.3954879 0.8653588
Russia 2.2483705 3.9911859 0.8639740
2000 1 Nicaragua -0.0646139 0.6838338 0.2161208
Gabon -0.1129269 0.2761624 0.2326250
Jamaica -0.1130860 1.2145774 0.1493130
Sri Lanka -0.1335834 0.2662712 0.2250965
Paraguay -0.1436962 0.9524493 0.1601099
2 United States 4.5893171 13.1964415 1.0000000
China 3.7406740 11.9423507 0.7659027
3 Nigeria 0.8595245 1.8778728 0.4862676
Venezuela 0.7606974 2.0797214 0.4281446
Algeria 0.7312850 1.8032085 0.4407051
Switzerland 0.7303827 1.5564415 0.4622287
Czech Republic 0.7251529 1.5363203 0.4618855
4 France 2.6410322 5.9663280 0.8485486
Germany 2.5866559 5.2215703 0.8924884
United Kingdom 2.4678750 5.2258200 0.8437745
Russia 2.2023021 4.6771401 0.7843754
India 2.1488373 6.3091552 0.6178415
2005 1 Latvia 0.0709662 1.8441304 0.1683635
Lithuania 0.0536703 1.9556479 0.1514323
Estonia 0.0335697 1.8634512 0.1514313
Cyprus -0.0059107 1.0643061 0.2062577
Guatemala -0.0409631 0.9336781 0.2035815
2 United States 5.1039043 15.5570073 1.0000000
China 4.2277722 13.4778889 0.8279049
3 Switzerland 0.8428128 2.0346482 0.4655593
Malaysia 0.8050772 1.5259106 0.4953334
Romania 0.7994892 2.1560965 0.4371553
Finland 0.7572825 2.9549674 0.3491114
Venezuela 0.7312526 1.9189672 0.4304229
4 France 2.6819014 6.1692839 0.8471756
Germany 2.5517816 5.2664615 0.8743143
India 2.4902800 7.1007166 0.6865690
United Kingdom 2.4284629 5.2790343 0.8230154
Italy 2.2089925 5.4902603 0.7149657
2010 1 Bolivia 0.0269319 1.6532811 0.1673745
Costa Rica -0.0263668 0.9074562 0.2118475
Dominican Republic -0.0286012 0.9603395 0.2062470
Paraguay -0.0677363 1.2596196 0.1637719
Gabon -0.0730384 0.8762086 0.1956269
2 China 5.6727886 19.4158066 0.8891867
United States 5.4776873 17.2716626 1.0000000
India 2.8659886 8.3185222 0.7314283
3 Pakistan 0.8113777 1.7681366 0.4764094
Iran 0.7437685 0.6747813 0.5458885
Venezuela 0.6336676 1.5321589 0.4250254
Morocco 0.6155613 0.9422647 0.4699870
Kenya 0.6107753 1.7460177 0.3967380
4 France 2.6337890 6.0536022 0.8378588
Germany 2.5928686 5.2742475 0.8903436
United Kingdom 2.4281251 5.0898675 0.8396590
Russia 2.3729813 5.4135809 0.7885019
Japan 2.2420667 4.6784561 0.8004406

Let’s examine the characteristics of each cluster:

# Calculate mean values of key metrics for each cluster
cluster_characteristics <- integrated_status %>%
  group_by(year, cluster) %>%
  summarise(
    n_countries = n(),
    mean_attribute_status = mean(attribute_status_pca),
    mean_network_status = mean(overall_status_network_pca),
    mean_combined_status = mean(combined_status_score),
    mean_status_inconsistency = mean(status_inconsistency)
  ) %>%
  ungroup()

# Display characteristics
cluster_characteristics %>%
  kable("html", caption = "Characteristics of Each Cluster by Year") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Characteristics of Each Cluster by Year
year cluster n_countries mean_attribute_status mean_network_status mean_combined_status mean_status_inconsistency
1960 1 45 -2.4061745 0.1952739 -0.7894427 0.5842668
1960 3 35 -0.8475384 0.4546693 0.1877555 1.1145413
1960 4 7 2.3123789 0.8089698 1.7472375 1.4781440
1965 1 63 -1.9544334 0.1777041 -0.7341415 0.3936052
1965 2 1 7.8378288 1.0000000 3.4211763 0.0079811
1965 3 38 -0.7567856 0.4274731 0.1407083 0.9548932
1965 4 7 2.0804849 0.7338434 1.5120739 1.2100221
1970 1 69 -1.9624387 0.1597341 -0.7800453 0.3920085
1970 2 1 8.6880271 1.0000000 3.6065137 0.3626937
1970 3 43 -0.7906142 0.4212024 0.1179246 0.9590860
1970 4 8 2.2060216 0.6916526 1.4357624 0.9479345
1975 1 71 -1.7687588 0.1601922 -0.7366987 0.4083594
1975 2 1 8.9097384 1.0000000 3.6548453 0.4593568
1975 3 50 -0.4588504 0.4277142 0.2062486 0.8805709
1975 4 10 2.4448457 0.6898696 1.4834428 0.8425453
1980 1 70 -1.6963416 0.1519706 -0.7411156 0.3915649
1980 2 1 9.2755234 1.0000000 3.7345839 0.6188340
1980 3 55 -0.4418611 0.4350379 0.2279490 0.8953588
1980 4 13 2.6374859 0.6743074 1.4871952 0.6894733
1985 1 72 -1.4231518 0.1482342 -0.6907438 0.4174034
1985 2 1 10.4649067 1.0000000 3.9938613 1.1373888
1985 3 55 -0.1053231 0.3972253 0.2083930 0.6625145
1985 4 12 3.2623351 0.6478800 1.5584666 0.4440401
1990 1 69 -1.1834023 0.1471690 -0.6410975 0.4698376
1990 2 1 11.8378274 1.0000000 4.2931486 1.7359634
1990 3 50 0.2745902 0.4017564 0.3023459 0.5553502
1990 4 18 3.4112636 0.6230846 1.5300011 0.4796901
1995 1 81 -0.7077138 0.1303413 -0.5787525 0.6168233
1995 2 2 10.8933901 0.8865117 3.8083868 1.8819635
1995 3 49 0.6758879 0.3682670 0.3075308 0.5863831
1995 4 27 3.8140667 0.6004098 1.5620894 0.5667486
2000 1 83 -0.4608961 0.1313870 -0.5223783 0.6813027
2000 2 2 12.5693961 0.8829513 4.1649956 2.6301772
2000 3 46 0.9436433 0.3485941 0.3175564 0.5180344
2000 4 28 3.7292922 0.5784423 1.4896271 0.5504568
2005 1 78 -0.0033210 0.1301665 -0.4256291 0.8865284
2005 2 2 14.5174481 0.9139525 4.6658382 3.3271397
2005 3 48 1.0268456 0.3407314 0.3163725 0.6076152
2005 4 31 3.8388041 0.5803082 1.5180852 0.5304710
2010 1 72 -0.0075196 0.1305729 -0.4255457 0.8846915
2010 2 3 15.0019971 0.8735384 4.6721549 3.7370199
2010 3 50 1.0798044 0.3240399 0.2869002 0.6881534
2010 4 37 3.5539436 0.5877152 1.4741893 0.4792312
# Visualize cluster characteristics
ggplot(cluster_characteristics, aes(x = mean_attribute_status, y = mean_network_status, 
                                   size = n_countries, color = as.factor(cluster))) +
  geom_point(alpha = 0.7) +
  facet_wrap(~ year) +
  labs(x = "Mean Attribute-Based Status", y = "Mean Network-Based Status",
       size = "Number of Countries", color = "Cluster",
       title = "Cluster Characteristics by Year") +
  theme_minimal()

Mapping Clusters to IR Categories

Now, let’s attempt to map these clusters to traditional IR categories based on their characteristics:

# Define IR categories based on cluster analysis
# We'll create a new categorical variable based on cluster membership and status scores

integrated_status <- integrated_status %>%
  mutate(
    ir_category = case_when(
      # This is a placeholder - we'll refine based on our analysis
      cluster == 2 ~ "Great Power",
      cluster == 4 ~ "Major Power",
      cluster == 3 & combined_status_score > 0 ~ "Regional Power",
      cluster == 3 & combined_status_score <= 0 ~ "Middle Power",
      cluster == 1 & combined_status_score > -0.5 ~ "Small Power",
      TRUE ~ "Minor Power"
    )
  )

# Count countries in each IR category by year
ir_category_counts <- integrated_status %>%
  group_by(year, ir_category) %>%
  summarise(count = n()) %>%
  ungroup()

# Display counts
ggplot(ir_category_counts, aes(x = as.factor(year), y = count, fill = ir_category)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(x = "Year", y = "Number of Countries", fill = "IR Category",
       title = "Distribution of Countries Across IR Categories by Year") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# List countries in the Great Power and Major Power categories
power_countries <- integrated_status %>%
  filter(ir_category %in% c("Great Power", "Major Power")) %>%
  select(year, country, ir_category, combined_status_score) %>%
  arrange(year, ir_category, desc(combined_status_score))

# Display power countries
power_countries %>%
  kable("html", caption = "Countries Classified as Great Powers or Major Powers") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE) %>%
  collapse_rows(columns = c(1, 3), valign = "top")
Countries Classified as Great Powers or Major Powers
year country ir_category combined_status_score
1960 United States Major Power 3.0086128
France 2.3037680
United Kingdom 2.0454482
Italy 1.5800123
Japan 1.1205146
Belgium 1.0864465
Netherlands 1.0858598
1965 United States Great Power 3.4211763
United Kingdom Major Power 2.2126755
France 2.1987822
Italy 1.6494158
Belgium 1.3147396
India 1.2148042
Japan 1.0069268
Netherlands 0.9871731
1970 United States Great Power 3.6065137
France Major Power 2.1508980
United Kingdom 2.0271376
Italy 1.5210700
Japan 1.3775047
India 1.3293003
Belgium 1.0902269
Netherlands 1.0229155
Canada 0.9670460
1975 United States Great Power 3.6548453
France Major Power 2.2124225
United Kingdom 2.0544217
Japan 1.5899470
India 1.5360593
Italy 1.5204139
China 1.3216996
Canada 1.1887287
Belgium 1.1793646
Egypt 1.1464717
Netherlands 1.0848994
1980 United States Great Power 3.7345839
France Major Power 2.3027900
United Kingdom 2.1107535
China 1.9536645
Belgium 1.5738503
Japan 1.5694991
Italy 1.5630169
Canada 1.4425732
India 1.3829457
Netherlands 1.2259924
Spain 1.1669497
Brazil 1.1137573
Portugal 1.0058543
Sweden 0.9218910
1985 United States Great Power 3.9938613
France Major Power 2.1575102
United Kingdom 2.1513962
China 2.0739836
Belgium 1.7662236
Italy 1.7277926
Japan 1.5929473
India 1.5747371
Canada 1.3203892
Netherlands 1.1951178
Spain 1.1518908
Brazil 1.0705418
Sweden 0.9190696
1990 United States Great Power 4.2931486
France Major Power 2.3556482
China 2.2960675
United Kingdom 2.2389526
Germany 1.9980488
Italy 1.8713244
India 1.8676743
Japan 1.8410710
Belgium 1.8160922
Canada 1.6499930
Spain 1.3634658
Netherlands 1.3228426
Brazil 1.2462010
Egypt 1.1241290
Sweden 1.0517184
Turkey 0.9230842
Australia 0.8715903
Denmark 0.8529472
Portugal 0.8491690
1995 United States Great Power 4.5327478
China 3.0840259
France Major Power 2.7983754
Germany 2.6295904
United Kingdom 2.5409477
Belgium 2.3399085
Russia 2.2483705
Italy 2.1445575
Japan 2.0968391
India 2.0590868
Canada 2.0257615
Spain 1.7136510
Netherlands 1.5846662
Brazil 1.5287506
Sweden 1.3834026
Egypt 1.3366633
Turkey 1.2893358
Austria 1.2004004
Mexico 1.1835412
Greece 1.1805389
Denmark 1.1620333
Portugal 1.0923640
Argentina 1.0011296
Australia 0.9980970
Korea, Republic of 0.9654244
Norway 0.9524204
Nigeria 0.9463691
Venezuela 0.8988813
Indonesia 0.8753072
2000 United States Great Power 4.5893171
China 3.7406740
France Major Power 2.6410322
Germany 2.5866559
United Kingdom 2.4678750
Russia 2.2023021
India 2.1488373
Italy 2.1235826
Belgium 2.0880536
Japan 2.0244101
Canada 1.9530458
Spain 1.6142967
Netherlands 1.5648890
Brazil 1.4521960
Egypt 1.2803820
Sweden 1.2501302
Turkey 1.2231078
Mexico 1.1603522
Korea, Republic of 1.0980131
Denmark 1.0926436
Greece 1.0821719
Austria 1.0516463
Portugal 1.0381607
Poland 0.9828276
Indonesia 0.9716829
Hungary 0.9687722
Argentina 0.9334524
South Africa 0.9201962
Norway 0.9088155
Australia 0.8800293
2005 United States Great Power 5.1039043
China 4.2277722
France Major Power 2.6819014
Germany 2.5517816
India 2.4902800
United Kingdom 2.4284629
Italy 2.2089925
Russia 2.2018975
Japan 2.1123534
Belgium 2.1009766
Canada 2.0185212
Spain 1.7003830
Netherlands 1.5915032
Brazil 1.5484047
Egypt 1.4623084
Poland 1.3085692
Sweden 1.2934285
Mexico 1.2863955
Turkey 1.2576341
Austria 1.2074910
Greece 1.2018228
Korea, Republic of 1.1597113
South Africa 1.1579433
Portugal 1.1437909
Denmark 1.1304875
Indonesia 1.0959979
Hungary 1.0939477
Australia 1.0237319
Argentina 0.9569454
Nigeria 0.9545242
Norway 0.9541387
Czech Republic 0.8839941
Algeria 0.8523200
2010 China Great Power 5.6727886
United States 5.4776873
India 2.8659886
France Major Power 2.6337890
Germany 2.5928686
United Kingdom 2.4281251
Russia 2.3729813
Japan 2.2420667
Italy 2.2129406
Belgium 2.1813942
Canada 2.0409978
Spain 1.8357531
Brazil 1.7766592
Netherlands 1.7728123
Egypt 1.5072451
Turkey 1.4393266
Denmark 1.3762201
Mexico 1.3576712
Poland 1.3571823
Korea, Republic of 1.3548716
Greece 1.3340882
South Africa 1.3333851
Sweden 1.3079135
Austria 1.2921516
Hungary 1.2847846
Portugal 1.2360109
Australia 1.1974375
Indonesia 1.1471434
Norway 1.1313469
Switzerland 1.1284450
Czech Republic 1.0971304
Romania 1.0935627
Argentina 1.0472744
Nigeria 0.9874622
Algeria 0.9484050
Bulgaria 0.9293095
Saudi Arabia 0.9157255
Malaysia 0.9067380
Chile 0.8817067
Finland 0.8620776

Stability of IR Categories Over Time

Let’s analyze how stable these categories are over time:

# For countries that appear in multiple years, calculate how often they change categories
country_stability <- integrated_status %>%
  select(country, year, ir_category) %>%
  arrange(country, year) %>%
  group_by(country) %>%
  mutate(
    next_category = lead(ir_category),
    category_change = ifelse(is.na(next_category), FALSE, ir_category != next_category)
  ) %>%
  filter(!is.na(next_category)) %>%
  summarise(
    years_observed = n() + 1,  # +1 because we lose one observation with lead()
    category_changes = sum(category_change, na.rm = TRUE),
    stability_pct = 100 * (1 - category_changes / (years_observed - 1))
  ) %>%
  arrange(desc(years_observed), desc(stability_pct))

# Display stability analysis
country_stability %>%
  filter(years_observed > 2) %>%  # Focus on countries observed multiple times
  head(20) %>%  # Top 20 most frequently observed countries
  kable("html", caption = "Stability of IR Categories for Frequently Observed Countries") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Stability of IR Categories for Frequently Observed Countries
country years_observed category_changes stability_pct
Belgium 11 0 100
France 11 0 100
Italy 11 0 100
Japan 11 0 100
Lao People’s Democratic Republic 11 0 100
Netherlands 11 0 100
Taiwan 11 0 100
United Kingdom 11 0 100
Argentina 11 1 90
Australia 11 1 90
Austria 11 1 90
Brazil 11 1 90
Cameroon 11 1 90
Canada 11 1 90
Denmark 11 1 90
Dominican Republic 11 1 90
Greece 11 1 90
Guinea 11 1 90
Iran 11 1 90
Luxembourg 11 1 90
# Calculate overall stability
overall_stability <- mean(country_stability$stability_pct, na.rm = TRUE)

The overall stability of IR category assignments across years is approximately 77.20%.

Visualization of Status Space and IR Categories

Let’s create a visualization that shows the status space with countries colored by their IR category:

# Create a plot for each year
status_plots <- list()

for(yr in unique(integrated_status$year)) {
  year_data <- integrated_status %>% filter(year == yr)
  
  # Filter to label only Great and Major powers
  label_data <- year_data %>% 
    filter(ir_category %in% c("Great Power", "Major Power"))
  
  p <- ggplot(year_data, aes(x = attribute_status_pca, y = overall_status_network_pca)) +
    geom_point(aes(color = ir_category), alpha = 0.7) +
    geom_text_repel(data = label_data, aes(label = country), max.overlaps = 15, size = 3) +
    labs(x = "Attribute-Based Status", y = "Network-Based Status",
         title = paste("Status Space and IR Categories -", yr),
         color = "IR Category") +
    theme_minimal()
  
  status_plots[[as.character(yr)]] <- p
}

# Display plots for selected years
grid.arrange(
  status_plots[[as.character(min(unique(integrated_status$year)))]], 
  status_plots[[as.character(max(unique(integrated_status$year)))]], 
  ncol = 2
)

Face Validity Assessment

Let’s assess the face validity of our IR categorization by comparing it to commonly accepted lists of great powers, major powers, etc. from the IR literature.

# For each year, extract the countries we classified as Great Powers
our_great_powers <- integrated_status %>%
  filter(ir_category == "Great Power") %>%
  group_by(year) %>%
  summarise(our_great_powers = paste(country, collapse = ", ")) %>%
  ungroup()

# Display our great powers
our_great_powers %>%
  kable("html", caption = "Our Classification of Great Powers by Year") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
Our Classification of Great Powers by Year
year our_great_powers
1965 United States
1970 United States
1975 United States
1980 United States
1985 United States
1990 United States
1995 China, United States
2000 China, United States
2005 China, United States
2010 China, India, United States